#pragma once

////////////////////////////////////////////////
// Borland C
////////////////////////////////////////////////

#ifdef __BORLANDC__
    #pragma hdrstop
#endif	// __BORLANDC__

////////////////////////////////////////////////
// MSVC++
////////////////////////////////////////////////

// Disable warning messages about the "unsafe" functions that VC++ 8.0 generates.
#if (_MSC_VER >= 1400) 
#pragma warning(disable : 4996)
#endif

////////////////////////////////////////////////
// OS specific
////////////////////////////////////////////////

#if defined __LINUX__
#include <cstdio>
#include <cstdlib>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/cdrom.h> 
#elif defined __APPLE__
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <IOKit/storage/IOCDMediaBSDClient.h>
#include <IOKit/storage/IOCDTypes.h>
#elif defined __WINDOWS__
#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN
// Conflicts with std::min & std::max.
#define NOMINMAX
#include <Wininet.h>
#include <mmsystem.h>
#endif

////////////////////////////////////////////////
// wxWidgets
////////////////////////////////////////////////

// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>

// For all others, include the necessary headers.
#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif	// WX_PRECOMP

#include <wx/aui/aui.h>
#include <wx/cmdline.h>
#include <wx/config.h>
#include <wx/datetime.h>
#include <wx/dir.h>
#include <wx/dnd.h>
#include <wx/file.h>
#include <wx/filename.h>
#include <wx/listctrl.h>
#include <wx/progdlg.h>
#include <wx/protocol/http.h>
#include <wx/spinctrl.h>
#include <wx/sstream.h>
#include <wx/stdpaths.h>
#include <wx/tokenzr.h>
#include <wx/tooltip.h>
#include <wx/treectrl.h>
#include <wx/volume.h>
#include <wx/xrc/xmlres.h>
#include <wx/wupdlock.h>
#include <wx/uri.h>
#include <wx/snglinst.h>
#include <wx/docview.h>
#include <wx/wfstream.h>
#include <wx/hyperlink.h>
#include <wx/zstream.h>
#include <wx/mstream.h>
#include <wx/intl.h>
#include <wx/regex.h>
#include <wx/htmllbox.h>
#include <wx/sysopt.h>
#include <wx/thread.h>
#include <wx/propgrid/propgrid.h>
#include <wx/propgrid/advprops.h>
#include <wx/bmpcbox.h>
#include <wx/imaglist.h>

////////////////////////////////////////////////
// wxSqlite3
////////////////////////////////////////////////

#include <wx/wxsqlite3.h>

////////////////////////////////////////////////
// STL Headers & Misc. C++ headers
////////////////////////////////////////////////

#pragma warning ( disable : 4702 )
#include <map>
#include <algorithm>
#include <deque>
#include <cctype>
#include <stack>
#include <set>
#pragma warning ( default : 4702 )

////////////////////////////////////////////////
// Boost
////////////////////////////////////////////////

#include <boost/shared_ptr.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>
#include <boost/bind.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/foreach.hpp>

#define foreach BOOST_FOREACH

////////////////////////////////////////////////
// Other
////////////////////////////////////////////////

namespace col 
{
	typedef std::deque < wxString > string_deque;

	enum
	{
		LogPerformance = 999
	};

	struct DatabaseTypeId
	{
		enum
		{
			AudioDatabase = 1
		};
	};
}